﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DTO_MechSys;
using BLL_MechSys;

namespace FORMS_MechSys
{
    public partial class frmClienteCadastro : Form
    {
        DTOEndereco dtoEndereco = new DTOEndereco();
        BLLEndereco bllEndereco = new BLLEndereco();
        DTOCliente dtoCliente = new DTOCliente();
        BLLCliente bllCliente = new BLLCliente();
        BLLUnidadeFederal bllUnidadeFederal = new BLLUnidadeFederal();
        DTOUnidadeFederal dtoUnidadeFederal = new DTOUnidadeFederal();
        List<DTOCliente> listClientes;
        DataTable dataTableGridView = new DataTable();
        int clienteID, enderecoID;




        DTOCor dtoCorPrincipal = new DTOCor();
        DTOCor dtoCorLetra = new DTOCor();
        DTOCor dtoCorFundo = new DTOCor();
        DTOCor dtoCorDataGrid = new DTOCor();
        BLLCor bllCor = new BLLCor();

        public frmClienteCadastro()
        {
            InitializeComponent();
            SetColors();
            PopulaGrid();
            Habilitar(false);


            cmbEstado.DataSource = bllUnidadeFederal.BuscarEstadosCadastrados(); ;

            cmbEstado.DisplayMember = "Nome";
            cmbEstado.ValueMember = "UFID";

        }

        private void SetColors()
        {
            dtoCorPrincipal = bllCor.Buscar("Principal");

            tlpMenuStripCenter.BackColor = tlpMenuStripLeft.BackColor = tlpMenuStripRigth.BackColor =
                btnCancelar.BackColor = toolStripButtonSair.BackColor = tableLayoutPanel5.BackColor = toolStripButtonSair.BackColor =
                btnNovo.BackColor = btnEditar.BackColor = btnCancelar.BackColor = btnExcluir.BackColor = btnSalvar.BackColor =
                label4.BackColor = tableLayoutPanel2.BackColor = tableLayoutPanel3.BackColor = btnPesquisar.BackColor = dtoCorPrincipal.Cor;

            dtoCorFundo = bllCor.Buscar("Fundo");
            tlpMenuStrip.BackColor = tableLayoutPanel1.BackColor = tableLayoutPanel4.BackColor = dtoCorFundo.Cor;

            dtoCorDataGrid = bllCor.Buscar("DataGrid");
            dtGridClientes.BackgroundColor = dtoCorDataGrid.Cor;

            dtoCorLetra = bllCor.Buscar("Letra");
            label1.ForeColor = label2.ForeColor = label3.ForeColor = label4.ForeColor = label5.ForeColor = label6.ForeColor =
                label7.ForeColor = label8.ForeColor = label9.ForeColor = label15.ForeColor =
                label10.ForeColor = label11.ForeColor = label12.ForeColor = label13.ForeColor = label14.ForeColor =
                label8.ForeColor = label9.ForeColor = label4.ForeColor = label5.ForeColor = label6.ForeColor = label7.ForeColor =
                btnEditar.ForeColor = btnExcluir.ForeColor = btnCancelar.ForeColor =
                btnNovo.ForeColor = btnSalvar.ForeColor = toolStripButtonSair.ForeColor = groupBox2.ForeColor = dtoCorLetra.Cor;
        }


        public void Limpar()
        {
            txtNome.Focus();
            txtNome.Clear();
            txtSobrenome.Clear();
            msktxtCPF.Clear();
            msktxtTelefone.Clear();
            msktxtCelular.Clear();
            txtEmail.Clear();
            txtRua.Clear();
            txtNumero.Clear();
            txtBairro.Clear();
            txtComplemento.Clear();
            txtCidade.Clear();
            cmbEstado.SelectedItem = null;
            msktxtCEP.Clear();
            dtpNascimento.Value = DateTime.Now.Date;
        }

        public void Habilitar(bool status)
        {
            panelDados.Enabled = status;
            btnNovo.Enabled = !status;
            btnCancelar.Enabled = status;
            btnSalvar.Enabled = status;
        }

        public void PopulaGrid()
        {
            DataRow dataRow;
            dataTableGridView = new DataTable();

            listClientes = bllCliente.BuscarClientesCadastrados();

            try
            {
                if (listClientes.Count > 0)
                {
                    dataTableGridView.Columns.Add("ClienteID", typeof(int));
                    dataTableGridView.Columns.Add("Nome", typeof(string));
                    dataTableGridView.Columns.Add("Sobrenome", typeof(string));
                    dataTableGridView.Columns.Add("CPF", typeof(string));
                    dataTableGridView.Columns.Add("Nascimento", typeof(string));
                    dataTableGridView.Columns.Add("Telefone", typeof(string));
                    dataTableGridView.Columns.Add("Celular", typeof(string));
                    dataTableGridView.Columns.Add("Email", typeof(string));
                    dataTableGridView.Columns.Add("EnderecoID", typeof(int));


                    foreach (DTOCliente dtoCliente in listClientes)
                    {
                        dataRow = dataTableGridView.NewRow();

                        dataRow["ClienteID"] = dtoCliente.ClienteID;
                        dataRow["Nome"] = dtoCliente.Nome;
                        dataRow["Sobrenome"] = dtoCliente.Sobrenome;
                        dataRow["CPF"] = dtoCliente.CPF;
                        dataRow["Nascimento"] = string.Format("{0:d}", dtoCliente.DataNascimento);
                        dataRow["Telefone"] = dtoCliente.Telefone;
                        dataRow["Celular"] = dtoCliente.Celular;
                        dataRow["Email"] = dtoCliente.Email;
                        dataRow["EnderecoID"] = dtoCliente.EnderecoID;

                        // Adiciona linha ao DataTable.
                        dataTableGridView.Rows.Add(dataRow);

                    }
                }

                dtGridClientes.DataSource = dataTableGridView;
            }
            catch (Exception)
            {
                if (new frmMessageBox().Show("Não foi possível carregar os dados para o grid!", "Carregamento", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error) == DialogResult.Retry)
                {
                    PopulaGrid();
                }
            }

        }

        public void PopulaGrid(string texto)
        {
            DataRow dataRow;
            dataTableGridView = new DataTable();

            listClientes = bllCliente.PesquisarClientes(texto);

            try
            {
                if (listClientes.Count > 0)
                {
                    dataTableGridView.Columns.Add("ClienteID", typeof(int));
                    dataTableGridView.Columns.Add("Nome", typeof(string));
                    dataTableGridView.Columns.Add("Sobrenome", typeof(string));
                    dataTableGridView.Columns.Add("CPF", typeof(string));
                    dataTableGridView.Columns.Add("Nascimento", typeof(string));
                    dataTableGridView.Columns.Add("Telefone", typeof(string));
                    dataTableGridView.Columns.Add("Celular", typeof(string));
                    dataTableGridView.Columns.Add("Email", typeof(string));
                    dataTableGridView.Columns.Add("EnderecoID", typeof(int));


                    foreach (DTOCliente dtoCliente in listClientes)
                    {
                        dataRow = dataTableGridView.NewRow();

                        dataRow["ClienteID"] = dtoCliente.ClienteID;
                        dataRow["Nome"] = dtoCliente.Nome;
                        dataRow["Sobrenome"] = dtoCliente.Sobrenome;
                        dataRow["CPF"] = dtoCliente.CPF;
                        dataRow["Nascimento"] = string.Format("{0:d}", dtoCliente.DataNascimento);
                        dataRow["Telefone"] = dtoCliente.Telefone;
                        dataRow["Celular"] = dtoCliente.Celular;
                        dataRow["Email"] = dtoCliente.Email;
                        dataRow["EnderecoID"] = dtoCliente.EnderecoID;

                        // Adiciona linha ao DataTable.
                        dataTableGridView.Rows.Add(dataRow);

                    }
                }

                dtGridClientes.DataSource = dataTableGridView;
            }
            catch (Exception)
            {
                new frmMessageBox().Show("Registro não encontrado!", "Pesquisa", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

        }

        private void btnNovo_Click_1(object sender, EventArgs e)
        {
            clienteID = 0;
            Habilitar(true);
            Limpar();
        }

        private void btnEditar_Click_1(object sender, EventArgs e)
        {
            Habilitar(true);
        }

        private void btnCancelar_Click_1(object sender, EventArgs e)
        {
            Limpar();
            Habilitar(false);
        }

        private void btnExcluir_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(clienteID.ToString()))
            {
                if (new frmMessageBox().Show("Deseja realmente excluir o cliente " + txtNome.Text + "?", "Exclusão", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning) == DialogResult.Yes)
                {
                    try
                    {
                        bllCliente.Excluir(clienteID);
                        bllEndereco.Excluir(enderecoID);
                        new frmMessageBox().Show("Cliente excluído com sucesso!", "Exclusão", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                        Limpar();

                        PopulaGrid();
                    }
                    catch
                    {
                        new frmMessageBox().Show("Não foi possível excluir o cliente!", "Exclusão", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }

                }
            }
            else
            {
                new frmMessageBox().Show("Selecione um cliente para excluir!", "Exclusão", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }

        }

        private void btnSalvar_Click_1(object sender, EventArgs e)
        {
            int enderecoID = 0;

            if (bllCliente.VerificaSeClienteIDExiste(clienteID) == false)
            {
                try
                {
                    dtoEndereco.Rua = txtRua.Text;
                    dtoEndereco.Numero = txtNumero.Text;
                    dtoEndereco.Bairro = txtBairro.Text;
                    dtoEndereco.Complemento = txtComplemento.Text;
                    dtoEndereco.Cidade = txtCidade.Text;
                    if (cmbEstado.SelectedValue != null)
                        dtoEndereco.Estado = (int)cmbEstado.SelectedValue;
                    dtoEndereco.CEP = msktxtCEP.Text.Replace("-", "");

                    if (!string.IsNullOrWhiteSpace(txtRua.Text) && !string.IsNullOrWhiteSpace(txtCidade.Text) && cmbEstado.SelectedIndex >= 0)
                    {
                        bllEndereco.Inserir(dtoEndereco);
                        enderecoID = bllEndereco.BuscarUltimoEnderecoID();
                    }
                    dtoCliente = new DTOCliente();
                    dtoCliente.Nome = txtNome.Text;
                    dtoCliente.Sobrenome = txtSobrenome.Text;
                    dtoCliente.CPF = msktxtCPF.Text.Replace(".", "").Replace("-", "").Replace(" ", "");
                    if (Convert.ToDateTime(dtpNascimento.Text) != DateTime.Now.Date)
                        dtoCliente.DataNascimento = Convert.ToDateTime(dtpNascimento.Text);
                    else
                        dtoCliente.DataNascimento = Convert.ToDateTime("01/01/1900");
                    dtoCliente.Celular = msktxtCelular.Text.Replace("-", "").Trim();
                    dtoCliente.Telefone = msktxtTelefone.Text.Replace("-", "").Trim();
                    if (dtoCliente.Telefone == "(  )")
                        dtoCliente.Telefone = null;
                    if (dtoCliente.Celular == "(  )")
                        dtoCliente.Celular = null;
                    dtoCliente.Email = txtEmail.Text;
                    if (enderecoID != 0)
                        dtoCliente.EnderecoID = enderecoID;

                    string cpf = msktxtCPF.Text.Replace(".", "").Replace("-", "").Replace(" ", "");

                    if (!string.IsNullOrEmpty(txtNome.Text) && !string.IsNullOrEmpty(dtoCliente.CPF))
                    {
                        if (!BLLUtilitarios.IsCpf(cpf))
                            new frmMessageBox().Show("CPF inválido!", "CPF", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        else
                        {
                            bllCliente.Inserir(dtoCliente);
                            new frmMessageBox().Show("Cliente cadastrado com sucesso!", "Cadastro", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            Limpar();
                            Habilitar(false);
                            PopulaGrid();
                        }
                    }
                    else
                    {
                        new frmMessageBox().Show("Os campos Nome e CPF são obrigatórios!", "Cadastro", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    }
                }
                catch (Exception)
                {
                    new frmMessageBox().Show("Não foi possível cadastrar o cliente!", "Cadastro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                Atualizar();
            }
        }

        private void Atualizar()
        {
            try
            {
                dtoEndereco.EnderecoID = enderecoID;
                dtoEndereco.Rua = txtRua.Text;
                dtoEndereco.Numero = txtNumero.Text;
                dtoEndereco.Bairro = txtBairro.Text;
                dtoEndereco.Complemento = txtComplemento.Text;
                dtoEndereco.Cidade = txtCidade.Text;
                if (cmbEstado.SelectedValue != null)
                    dtoEndereco.Estado = (int)cmbEstado.SelectedValue;
                dtoEndereco.CEP = msktxtCEP.Text.Replace("-", "");

                bllEndereco.Atualizar(dtoEndereco);
                dtoCliente = new DTOCliente();
                dtoCliente.ClienteID = clienteID;
                dtoCliente.Nome = txtNome.Text;
                dtoCliente.Sobrenome = txtSobrenome.Text;
                dtoCliente.CPF = msktxtCPF.Text.Replace(".", "").Replace("-", "").Replace(" ", "");
                if (Convert.ToDateTime(dtpNascimento.Text) != DateTime.Now.Date)
                    dtoCliente.DataNascimento = Convert.ToDateTime(dtpNascimento.Text);
                else
                    dtoCliente.DataNascimento = Convert.ToDateTime("01/01/1900");

                dtoCliente.Celular = msktxtCelular.Text.Replace("-", "").Trim();
                dtoCliente.Telefone = msktxtTelefone.Text.Replace("-", "").Trim();
                if (dtoCliente.Telefone == "(  )")
                    dtoCliente.Telefone = null;
                if (dtoCliente.Celular == "(  )")
                    dtoCliente.Celular = null;
                dtoCliente.Email = txtEmail.Text;
                dtoCliente.EnderecoID = enderecoID;

                string cpf = msktxtCPF.Text.Replace(".", "").Replace("-", "").Replace(" ", "");
                if (!string.IsNullOrEmpty(txtNome.Text) && !string.IsNullOrEmpty(dtoCliente.CPF) && !string.IsNullOrEmpty(msktxtCelular.Text))
                {

                    if (!BLLUtilitarios.IsCpf(cpf))
                        new frmMessageBox().Show("CPF inválido!", "CPF", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    else
                    {
                        bllCliente.Atualizar(dtoCliente);
                        new frmMessageBox().Show("Cliente atualizado com sucesso!", "Atualização", MessageBoxButtons.OK, MessageBoxIcon.Information);

                        Limpar();
                        Habilitar(false);
                        PopulaGrid();
                    }
                }
                else
                {
                    new frmMessageBox().Show("Os campos Nome e CPF são obrigatórios!", "Cadastro", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
            catch (Exception)
            {
                new frmMessageBox().Show("Não foi possível atualizar o cliente!", "Atualização", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void toolStripButtonSair_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void dtGridClientes_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex != -1)
            {
                if (!string.IsNullOrEmpty(dtGridClientes.Rows[e.RowIndex].Cells["ClienteIDD"].Value.ToString()))
                    clienteID = (int)dtGridClientes.Rows[e.RowIndex].Cells["ClienteIDD"].Value;
                if (!string.IsNullOrEmpty(dtGridClientes.Rows[e.RowIndex].Cells["Nome"].Value.ToString()))
                    txtNome.Text = (string)dtGridClientes.Rows[e.RowIndex].Cells["Nome"].Value;
                if (!string.IsNullOrEmpty(dtGridClientes.Rows[e.RowIndex].Cells["Sobrenome"].Value.ToString()))
                    txtSobrenome.Text = (string)dtGridClientes.Rows[e.RowIndex].Cells["Sobrenome"].Value;
                if (!string.IsNullOrEmpty(dtGridClientes.Rows[e.RowIndex].Cells["CPF"].Value.ToString()))
                    msktxtCPF.Text = (string)dtGridClientes.Rows[e.RowIndex].Cells["CPF"].Value;
                if (!string.IsNullOrEmpty(dtGridClientes.Rows[e.RowIndex].Cells["Nascimento"].Value.ToString()))
                    dtpNascimento.Text = dtGridClientes.Rows[e.RowIndex].Cells["Nascimento"].Value.ToString();
                if (!string.IsNullOrEmpty(dtGridClientes.Rows[e.RowIndex].Cells["Telefone"].Value.ToString()))
                    msktxtTelefone.Text = (string)dtGridClientes.Rows[e.RowIndex].Cells["Telefone"].Value;
                if (!string.IsNullOrEmpty(dtGridClientes.Rows[e.RowIndex].Cells["Celular"].Value.ToString()))
                    msktxtCelular.Text = (string)dtGridClientes.Rows[e.RowIndex].Cells["Celular"].Value;
                if (!string.IsNullOrEmpty(dtGridClientes.Rows[e.RowIndex].Cells["Email"].Value.ToString()))
                    txtEmail.Text = (string)dtGridClientes.Rows[e.RowIndex].Cells["Email"].Value;


                if (!string.IsNullOrEmpty(dtGridClientes.Rows[e.RowIndex].Cells["EnderecoID"].Value.ToString()))
                    enderecoID = (int)dtGridClientes.Rows[e.RowIndex].Cells["EnderecoID"].Value;

                DTOEndereco enderecoCliente = bllEndereco.BuscarEnderecoPorEnderecoID(enderecoID);
                if (enderecoCliente != null)
                {
                    txtRua.Text = enderecoCliente.Rua;
                    txtNumero.Text = enderecoCliente.Numero;
                    txtBairro.Text = enderecoCliente.Bairro;
                    txtComplemento.Text = enderecoCliente.Complemento;
                    txtCidade.Text = enderecoCliente.Cidade;
                    cmbEstado.Text = bllUnidadeFederal.BuscarEstadosPorUFID(enderecoCliente.Estado).Nome;
                    msktxtCEP.Text = enderecoCliente.CEP;
                }

                Habilitar(false);
                btnEditar.Enabled = true;
            }
        }

        private void btnNovo_EnabledChanged(object sender, EventArgs e)
        {
            if (btnNovo.Enabled)
                btnNovo.BackColor = dtoCorPrincipal.Cor;
            else
                btnNovo.BackColor = dtoCorFundo.Cor;

        }

        private void btnEditar_EnabledChanged(object sender, EventArgs e)
        {
            if (btnEditar.Enabled)
                btnEditar.BackColor = dtoCorPrincipal.Cor;
            else
                btnEditar.BackColor = dtoCorFundo.Cor;


        }

        private void btnCancelar_EnabledChanged(object sender, EventArgs e)
        {
            if (btnCancelar.Enabled)
                btnCancelar.BackColor = dtoCorPrincipal.Cor;
            else
                btnCancelar.BackColor = dtoCorFundo.Cor;


        }

        private void btnExcluir_EnabledChanged(object sender, EventArgs e)
        {
            if (btnExcluir.Enabled)
                btnExcluir.BackColor = dtoCorPrincipal.Cor;
            else
                btnExcluir.BackColor = dtoCorFundo.Cor;
        }

        private void btnSalvar_EnabledChanged(object sender, EventArgs e)
        {
            if (btnSalvar.Enabled)
                btnSalvar.BackColor = dtoCorPrincipal.Cor;
            else
                btnSalvar.BackColor = dtoCorFundo.Cor;
        }

        private void btnPesquisar_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtPesquisar.Text))
            {
                PopulaGrid(txtPesquisar.Text);
            }
        }

        private void msktxtCPF_Leave(object sender, EventArgs e)
        {
        }

        private void msktxtCPF_TextChanged(object sender, EventArgs e)
        {
            string cpf = msktxtCPF.Text.Replace(".", "").Replace("-", "").Replace(" ", "");
            if (cpf.Length == 11)
                if (BLLUtilitarios.IsCpf(cpf) == false)
                {
                    new frmMessageBox().Show("CPF Inválido! Insira novamente o valor", "Validação do CPF", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    msktxtCPF.Focus();
                }
        }

    }
}
